
#ifndef STUDIO_GEO_PROP_H
#define STUDIO_GEO_PROP_H

#include <studio_macros.h>

class studio_geo_prop
{
  public:
    enum class enum_prop_type
    {
        eptNone = 0,      // 无效
        eptInt = 1,       // 整形
        eptNumeric = 2,   // 浮点数
        eptString = 3,    // 字符串
        eptBinary = 4,    // 二进制流
        eptTime = 5,      // 时间
        eptDate = 6,      // 日期
        eptDateTime = 7,  // 日期加时间
        eptLong = 8       // 长整形
    };

  public:
    studio_geo_prop() = default;
    studio_geo_prop(const std::string& s);
    studio_geo_prop(const int& i);
    studio_geo_prop(const double& d);
    studio_geo_prop(const long long& ll);
    studio_geo_prop(const std::vector<unsigned char>& bs);

    studio_geo_prop(const studio_geo_prop& other);
    void release();
    ~studio_geo_prop();

  public:
    enum_prop_type value_type() const;
    std::string as_string() const;
    int as_int() const;
    double as_double() const;
    std::vector<unsigned char> as_binary() const;
    long long as_longlong() const;

  private:
    enum_prop_type m_type{enum_prop_type::eptNone};
    std::any m_data;
};

#endif  // STUDIO_GEO_PROP_H
